/**
 * 
 */
package org.swing.utility.common.datetime;

import java.lang.reflect.Constructor;
import java.util.List;
import java.util.Map;

import org.joda.time.DateTime;

/**
 * @author lqnhu
 *
 */
public class DateTimePeriodDataUtil {
	private DateTimePeriodDataUtil() {
		// only static method
	}

	@SuppressWarnings("unchecked")
	public static <T extends DateTimePeriodData> void fill(Class<T> type,
			Map<DateTime, T> dataset, List<DateTimePeriod> periods) {
		// loop thru every period, check its it starting time exists in the
		// dataset
		for (DateTimePeriod period : periods) {
			if (dataset.containsKey(period.getStart())) {
				// do nothing
			} else {
				// add a default entry
				try {
					Constructor ctor = type
							.getConstructor(DateTimePeriod.class);
					T data = (T) ctor.newInstance(period);
					dataset.put(period.getStart(), data);
				} catch (Exception e) {
					throw new RuntimeException(
							"Failed to create default dataset entry", e);
				}
			}
		}
	}
}
